package com.coolingme.FileInfo;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 文件类的基础用法
 *
 * @author wangyue
 * @date 2019/3/27 21:09
 */
public class FileInfo {
    public static void main(String[] args) {
        /*
         *  file对象不是真正的文件
         *  file对象是 堆内存中 创建出来的一个对象空间
         *  路径是看创建的对象 是否能与硬盘中的一个真实对象产生映射关系
         *  硬盘上的文件名字是不区分大小的     内存中的File对象 变量名字区分大小写
         */
        File file = new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file//test.txt");

//        File file = new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file//Test.txt");
        System.out.println(file.canExecute());// 可执行
        System.out.println(file.canRead());// 可读
        System.out.println(file.canWrite());// 可写
        System.out.println(file.isHidden());// 是否隐藏

        System.out.println(file.isFile());// 是否为一个文件
        System.out.println(file.isDirectory()); // 是否为一个目录

        long l = file.length();//字节个数
        System.out.println(l);

        long time = file.lastModified();//文件最后修改时间
        Date date = new Date(time);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(date));

        file.setLastModified(time);//修改文件最后修改时间

        String absolutePath = file.getAbsolutePath();//获取文件绝对路径
        System.out.println("绝对路径:" + absolutePath);

        File file2 = new File("Java//IntelliJIDEA//workspace//java-learn//IO//file//test.txt");
        System.out.println("相对路径:" + file2.getAbsolutePath());

        String name = file.getName();// 获取文件名
        System.out.println(name);

        // 创建一个file对象，没有文件后缀也可以创建
        File newFile = new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file//newTest.txt");
        try {
            System.out.println("文件创建成功");
            Boolean isCreate = newFile.createNewFile(); // 通过file对象 在硬盘上创建文件
            System.out.println(isCreate);//返回值为是否创建成功

//            Boolean isDelete =  newFile.delete();//文件删除
//            System.out.println(isDelete);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 创建一个file对象
        File newDir = new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file//newDir");
        /*
         *  通过file对象 在硬盘上创建新文件夹 文件夹不占用硬盘大小
         *  mkdir()只能在父元素(父路径)存在的情况下使用
         *  mkdirs()能将所有未创建的外层文件夹都创建
         */
        Boolean isMkdir = newDir.mkdir();
        System.out.println(isMkdir);

        String pName = newDir.getParent();// 获取当前文件父文件名称
        System.out.println("父文件名称:" + pName);


        File pFile = newDir.getParentFile();// 循环获取文件父文件
        while (pFile != null) {
            System.out.println(pFile.getAbsolutePath());//文件绝对路径
            // 以当前文件的父文件 重新向上再找
            pFile = pFile.getParentFile();
        }

        File file0 = new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file");
        // 获取当前file的所有子文件名称
        // 当获取不到子文件夹下的文件

        String[] fileNameList = file0.list();

        if (fileNameList != null) {
            System.out.println("获取当前file的所有子文件名称:");
            for (String string : fileNameList) {
                System.out.println(string);
            }
        }



        /*
         *获取当前文件所有子文件
         * 数组对象为空       当前file对象是一个文件 或 当前文件夹下为空
         * 数组对象不为空      当前file对象是一个文件夹
         * 数组对象的长度不为0   当前file对象是一个不为空的文件夹
         */
        File[] fileList = file0.listFiles();
        if (fileList == null) {
            // NullPointerException
            System.out.println("当前file对象是一个文件");
        } else {
            System.out.println("当前file对象是一个文件夹");
            System.out.println("数组长度:" + fileList.length);
        }
//        for (File f : fileList) {
//            System.out.println(f.getAbsolutePath());
//        }

        File dFile1 = new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file//deleteDir//deleteAAA");
        File dFile2 = new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file//deleteDir//deleteBBB");
        File dFile3 = new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file//deleteDir//deleteCCC");
        dFile1.mkdirs();
        dFile2.mkdirs();
        dFile3.mkdirs();
        try {
            new File(dFile1.getAbsolutePath() + "//aaa.txt").createNewFile();
            new File(dFile1.getAbsolutePath() + "//bbb.txt").createNewFile();
            new File(dFile1.getAbsolutePath() + "//ccc.txt").createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }


        //递归获取文件所有子文件,包括子文件下的文件
        deleteFile(new File("D://Java//IntelliJIDEA//workspace//java-learn//IO//file//deleteDir"));

    }

    /**
     * 递归删除文件所有子文件,包括子文件下的文件 的文件
     * 并输出绝对路径
     *
     * @param file
     */
    public static void deleteFile(File file) {
        System.out.println("删除文件:" + file.getName());
        File[] fileList = file.listFiles();//先获取当前文件的子文件
        if (fileList != null && fileList.length > 0) {// 判断当前file对象是一个文件夹
            // 遍历子文件的绝对路径
            for (File f : fileList) {
                // 递归调用,先删里面，再删外面
                deleteFile(f);
                System.out.println(f.getName() + "的绝对路径为:" + f.getAbsolutePath());
                f.delete();
            }
        }

    }

}
